<!DOCTYPE html>
<html>
<head>

</head>
<body>

	<div id="stagemonitor-overlay" style="display: none;">
		<iframe id="stagemonitor-modal"></iframe>
	</div>

	<script type="text/javascript">
		(function () {
			var stagemonitorWindow = document.getElementById("stagemonitor-modal").contentWindow;
			var contextPath = "/stagemonitor-web-servlet/src/main/resources";

			var xmlhttp = new XMLHttpRequest();
			xmlhttp.onreadystatechange = function () {
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
					var doc = stagemonitorWindow.document;
					doc.open();
					doc.write(xmlhttp.responseText
							.split("href=\"").join("href=\"" + contextPath)
							.split("src=\"").join("src=\"" + contextPath));
					doc.close();
				}
			};
			xmlhttp.open("GET", "../../main/resources/stagemonitor/static/stagemonitor-modal.html", true);
			xmlhttp.send();

			window.StagemonitorLoaded = function () {
				function isDomLoaded() {
					return document.readyState === "complete";
				}
				if (isDomLoaded()) {
					init();
				} else {
					document.onreadystatechange = function () {
						if (isDomLoaded()) {
							init();
						}
					};
				}
				function init() {
					var stagemonitorWindow = document.getElementById("stagemonitor-modal").contentWindow,
							stagemonitorOverlayShow = document.getElementById("stagemonitor-overlay-show"),
							stagemonitorOverlay = document.getElementById("stagemonitor-overlay"),
							data = {
								"duration_cpu_ms": 7,
								"instance": "test",
								"session_id": "EA0EFA54520C177883744D7F8DEA2D8B",
								"type": "http",
								"tracking": {"unique_visitor_id": "08ab0bc8717ab83953a48a035c76c591add9eb04"},
								"jaeger": {"version": "Java-0.17.0", "hostname": "N51.local"},
								"sampler": {"type": "const", "param": true},
								"application": "Spring-PetClinic",
								"call_tree_json": "{\"signature\":\"GET /\",\"executionTime\":7005708,\"children\":[{\"signature\":\"void org.springframework.web.servlet.FrameworkServlet.service(HttpServletRequest,HttpServletResponse)\",\"executionTime\":6004907,\"children\":[{\"signature\":\"void org.springframework.web.servlet.DispatcherServlet.render(ModelAndView,HttpServletRequest,HttpServletResponse)\",\"executionTime\":5259759,\"children\":[],\"shortSignature\":\"DispatcherServlet#render\",\"ioquery\":false,\"netExecutionTime\":5259759}],\"shortSignature\":\"FrameworkServlet#service\",\"ioquery\":false,\"netExecutionTime\":745148}],\"shortSignature\":null,\"ioquery\":false,\"netExecutionTime\":1000801}",
								"duration_cpu": 7435,
								"host": "N51.local",
								"http": {
									"headers": {
										"connection": "keep-alive",
										"referer": "http://localhost:8881/petclinic/oups.html",
										"host": "localhost:8881",
										"pragma": "no-cache",
										"upgrade-insecure-requests": "1",
										"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36",
										"cache-control": "no-cache",
										"accept-language": "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4",
										"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
										"accept-encoding": "gzip, deflate, sdch, br"
									}, "url": "/petclinic/", "method": "GET", "referring_site": null
								},
								"name": "GET /",
								"duration": 7811,
								"duration_ms": 7,
								"@timestamp": "2016-12-09T15:35:17.934+0100",
								"id": "552474fa6c0630a3",
								"trace_id": "552474fa6c0630a3",
								"parent_id": "0",
								"sampled": true,
								"debug": false
							},
							configurationSources = {"Transient Configuration Source":true,"Java System Properties":false,"stagemonitor.properties":true},
							configurationOptions = {"Servlet Plugin":[{"dynamic":true,"sensitive":false,"key":"stagemonitor.requestmonitor.http.requestparams.confidential.regex","aliasKeys":[],"label":"Deprecated: Confidential request parameters (regex)","description":"Deprecated, use stagemonitor.tracing.params.confidential.regex instead.A list of request parameter name patterns that should not be collected.nA request parameter is either a query string or a application/x-www-form-urlencoded request body (POST form content)","tags":["security-relevant","deprecated"],"defaultValueAsString":"(?i).*pass.*, (?i).*credit.*, (?i).*pwd.*","configurationCategory":"Servlet Plugin","valueType":"Collection","validOptions":null,"valueAsString":"(?i).*pass.*, (?i).*credit.*, (?i).*pwd.*","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.requestmonitor.http.collectHeaders","aliasKeys":[],"label":"Collect HTTP headers","description":"Whether or not HTTP headers should be collected with a call stack.","tags":["security-relevant"],"defaultValueAsString":"true","configurationCategory":"Servlet Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.requestmonitor.http.parseUserAgent","aliasKeys":[],"label":"Analyze user agent","description":"Whether or not the user-agent header should be parsed and analyzed to get information about the browser, device type and operating system. If you want to enable this option, you have to add a dependency on net.sf.uadetector:uadetector-resources:2014.10. As this library is no longer maintained, it is however recommended to use the Elasticsearch ingest user agent plugin. See https://www.elastic.co/guide/en/elasticsearch/plugins/master/ingest-user-agent.html","tags":["deprecated"],"defaultValueAsString":"false","configurationCategory":"Servlet Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.requestmonitor.http.headers.excluded","aliasKeys":[],"label":"Do not collect headers","description":"A list of (case insensitive) header names that should not be collected.","tags":["security-relevant"],"defaultValueAsString":"cookie, authorization, X-Stagemonitor-Show-Widget","configurationCategory":"Servlet Plugin","valueType":"Collection","validOptions":null,"valueAsString":"cookie, authorization, X-Stagemonitor-Show-Widget","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.web.widget.enabled","aliasKeys":[],"label":"In browser widget enabled","description":"If active, stagemonitor will inject a widget in the web site containing the call tree. If disabled, you can still enable it for authorized users by sending the HTTP header `X-Stagemonitor-Show-Widget: <stagemonitor.password>`. You can use browser plugins like Modify Headers for this. Note: if `stagemonitor.password` is set to an empty string, you can't disable the widget.nRequires Servlet-Api >= 3.0","tags":[],"defaultValueAsString":"true","configurationCategory":"Servlet Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.groupUrls","aliasKeys":[],"label":"Group URLs regex","description":"Combine url paths by regex to a single url group.nE.g. `(.*).js: *.js` combines all URLs that end with `.js` to a group named `*.js`. The metrics for all URLs matching the pattern are consolidated and shown in one row in the request table. The syntax is `<regex>: <group name>[, <regex>: <group name>]*`","tags":[],"defaultValueAsString":"(.*).js$: *.js,n(.*).css$: *.css,n(.*).jpg$: *.jpg,n(.*).jpeg$: *.jpeg,n(.*).png$: *.png","configurationCategory":"Servlet Plugin","valueType":"Map","validOptions":null,"valueAsString":"(.*).js$: *.js,n(.*).css$: *.css,n(.*).jpg$: *.jpg,n(.*).jpeg$: *.jpeg,n(.*).png$: *.png","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.web.collectPageLoadTimesPerRequest","aliasKeys":[],"label":"Collect Page Load Time data per request group","description":"Whether or not browser, network and overall execution time should be collected per request group.nIf set to true, four additional timers will be created for each request group to record the page rendering time, dom processing time, network time and overall time per request. If set to false, the times of all requests will be aggregated.","tags":[],"defaultValueAsString":"false","configurationCategory":"Servlet Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.web.paths.excluded","aliasKeys":[],"label":"Excluded paths","description":"Request paths that should not be monitored. A value of `/aaa` means, that all paths starting with `/aaa` should not be monitored. It's recommended to not monitor static resources, as they are typically not interesting to monitor but consume resources when you do.","tags":[],"defaultValueAsString":"/VAADIN/, /HEARTBEAT/, /favicon.ico","configurationCategory":"Servlet Plugin","valueType":"Collection","validOptions":null,"valueAsString":"/VAADIN/, /HEARTBEAT/, /favicon.ico","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.web.metricsServlet.allowedOrigin","aliasKeys":[],"label":"Allowed origin","description":"The Access-Control-Allow-Origin header value for the metrics servlet.","tags":[],"defaultValueAsString":null,"configurationCategory":"Servlet Plugin","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.web.metricsServlet.jsonpParameter","aliasKeys":[],"label":"The Jsonp callback parameter name","description":"The name of the parameter used to specify the jsonp callback.","tags":[],"defaultValueAsString":null,"configurationCategory":"Servlet Plugin","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.requestmonitor.spring.monitorOnlySpringMvcRequests","aliasKeys":[],"label":"Monitor only SpringMVC requests","description":"Whether or not requests should be ignored, if they will not be handled by a Spring MVC controller method.nThis is handy, if you are not interested in the performance of serving static files. Setting this to true can also significantly reduce the amount of files (and thus storing space) Graphite will allocate.","tags":[],"defaultValueAsString":"false","configurationCategory":"Servlet Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.requestmonitor.resteasy.monitorOnlyResteasyRequests","aliasKeys":[],"label":"Monitor only Resteasy reqeusts","description":"Whether or not requests should be ignored, if they will not be handled by a Resteasy resource method.nThis is handy, if you are not interested in the performance of serving static files. Setting this to true can also significantly reduce the amount of files (and thus storing space) Graphite will allocate.","tags":[],"defaultValueAsString":"false","configurationCategory":"Servlet Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.requestmonitor.requestExceptionAttributes","aliasKeys":[],"label":"Request Exception Attributes","description":"Defines the list of attribute names to check on the HttpServletRequest when searching for an exception. nnStagemonitor searches this list in order to see if any of these attributes are set on the request with an Exception object and then records that information on the span. If your web framework sets a different attribute outside of the defaults, you can add that attribute to this list to properly record the exception on the trace.","tags":[],"defaultValueAsString":"javax.servlet.error.exception, exception, org.springframework.web.servlet.DispatcherServlet.EXCEPTION","configurationCategory":"Servlet Plugin","valueType":"Collection","validOptions":null,"valueAsString":"javax.servlet.error.exception, exception, org.springframework.web.servlet.DispatcherServlet.EXCEPTION","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.web.honorDoNotTrackHeader","aliasKeys":[],"label":"Honor do not track header","description":"When set to true, requests that include the dnt header won't be reported. Depending on your use case you might not be required to stop reporting spans even if dnt is set. See https://tools.ietf.org/html/draft-mayer-do-not-track-00#section-9.3","tags":["privacy"],"defaultValueAsString":"false","configurationCategory":"Servlet Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.eum.enabled","aliasKeys":[],"label":"Enable End User Spans","description":"The End User Monitoring feature collects the browser, network and overall perceived execution time from the user's perspective. When activated, this application will be able to receive client spans. You probably want to enable `stagemonitor.eum.injection.enabled` too.","tags":[],"defaultValueAsString":"false","configurationCategory":"Servlet Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.eum.injection.enabled","aliasKeys":[],"label":"Enable End User script injection","description":"If enabled, stagemonitor will inject the client span collection scripts in the loaded page.","tags":[],"defaultValueAsString":"true","configurationCategory":"Servlet Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.eum.whitelistedClientSpanTags","aliasKeys":[],"label":"Whitelisted client span tags","description":"Defines the list of client span tags, which a client shall be allowed to sent. Tags may be added by plugins and this configuration option. Tags neither provided by a plugin nor added by this configuration option are ignored. Syntax is `key: type`. Valid types are string, boolean and number. Example: `user: string, logged_in: boolean, age: number`","tags":[],"defaultValueAsString":"","configurationCategory":"Servlet Plugin","valueType":"Map","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.eum.debugCollectionScript","aliasKeys":[],"label":"Use debug build of weasel","description":"If set, stagemonitor will serve the debug build of weasel for end user monitoring. This should only be set to true, if you debug errors in the end user monitoring.","tags":["advanced"],"defaultValueAsString":"false","configurationCategory":"Servlet Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.eum.clientSpanScriptCacheDuration","aliasKeys":[],"label":"Client Span Script Cache Duration","description":"This configuration option sets how long the script shall be cached by browsers. The value entered is the cache duration in minutes. Entering 0 or a negative value will result in transmitting 'Cache-Control: no-cache'.","tags":["advanced"],"defaultValueAsString":"5","configurationCategory":"Servlet Plugin","valueType":"Integer","validOptions":null,"valueAsString":"5","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null}],"EhCache Plugin":[{"dynamic":false,"sensitive":false,"key":"stagemonitor.ehcache.name","aliasKeys":[],"label":"EhCache cache name","description":"The name of the ehcache to instrument (the value of the `name` attribute of the `ehcache` tag in ehcache.xml)","tags":[],"defaultValueAsString":null,"configurationCategory":"EhCache Plugin","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.ehcache.get.timer","aliasKeys":[],"label":"Create timer for cache gets","description":"If set to true, a timer for each cache will be created which measures the time to get a element from the cache. If you have a lot of caches, that could lead to a increased network and disk utilisation. If set to false, only a meter (which measures the rate) will be created","tags":[],"defaultValueAsString":"false","configurationCategory":"EhCache Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null}],"Alerting":[{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.mute","aliasKeys":[],"label":"Mute alerts","description":"If set to `true`, alerts will be muted.","tags":[],"defaultValueAsString":"false","configurationCategory":"Alerting","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.alerts.frequency","aliasKeys":[],"label":"Threshold check frequency (sec)","description":"The threshold check frequency in seconds.","tags":[],"defaultValueAsString":"60","configurationCategory":"Alerting","valueType":"Long","validOptions":null,"valueAsString":"60","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.subscriptions","aliasKeys":[],"label":"Alert Subscriptions","description":"The alert subscriptions.","tags":[],"defaultValueAsString":"{}","configurationCategory":"Alerting","valueType":"Map","validOptions":null,"valueAsString":"{}","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.checks","aliasKeys":[],"label":"Check Groups","description":"The check groups that contain thresholds for metrics.","tags":[],"defaultValueAsString":"{}","configurationCategory":"Alerting","valueType":"Map","validOptions":null,"valueAsString":"{}","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.smtp.host","aliasKeys":[],"label":"SMTP Mailhost","description":null,"tags":[],"defaultValueAsString":null,"configurationCategory":"Alerting","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":true,"key":"stagemonitor.alerts.smtp.password","aliasKeys":[],"label":"SMTP-Password","description":null,"tags":[],"defaultValueAsString":null,"configurationCategory":"Alerting","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.smtp.user","aliasKeys":[],"label":"SMTP-User name","description":null,"tags":[],"defaultValueAsString":null,"configurationCategory":"Alerting","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.smtp.protocol","aliasKeys":[],"label":"SMTP-Protocol","description":null,"tags":[],"defaultValueAsString":"smtp","configurationCategory":"Alerting","valueType":"String","validOptions":null,"valueAsString":"smtp","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.smtp.port","aliasKeys":[],"label":"SMTP-Port","description":null,"tags":[],"defaultValueAsString":"25","configurationCategory":"Alerting","valueType":"Integer","validOptions":null,"valueAsString":"25","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.smtp.from","aliasKeys":[],"label":"SMTP-From","description":"The from email address for sending notifications.","tags":[],"defaultValueAsString":"alert@stagemonitor.org","configurationCategory":"Alerting","valueType":"String","validOptions":null,"valueAsString":"alert@stagemonitor.org","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":true,"key":"stagemonitor.alerts.pushbullet.accessToken","aliasKeys":[],"label":"Pushbullet Access Token","description":"The Access Token for the Pushbullet API. You can find it in your Pushbullet account settings.","tags":[],"defaultValueAsString":null,"configurationCategory":"Alerting","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.template.html","aliasKeys":[],"label":"Alerts HTML freemarker template","description":null,"tags":[],"defaultValueAsString":"<#-- @ftlvariable name=\"incident\" type=\"org.stagemonitor.alerting.incident.Incident\" -->n<h3>Incident for check ${incident.checkName}</h3>nFirst failure: ${incident.firstFailureAt?datetime?iso_local}<br>n<#if incident.resolvedAt??>nResolved at: ${incident.resolvedAt?datetime?iso_local}<br>n</#if>nOld status: ${incident.oldStatus!'OK'}<br>nNew status: ${incident.newStatus}<br>n<#if incident.failedChecks gt 0>Failing check<#if incident.failedChecks gt 1>s</#if>: ${incident.failedChecks}<br>nHosts: ${incident.hosts?join(\", \")}<br>nInstances: ${incident.instances?join(\", \")}<br><br>nnt<#if incident.checkResults?has_content>n<table>nt<thead>nt<tr>ntt<th>Host</th>ntt<th>Instance</th>ntt<th>Status</th>ntt<th>Description</th>ntt<th>Current Value</th>nt</tr>nt</thead>nt<tbody>ntt<#list incident.checkResults as results>nttt<#assign measurementSession=results.measurementSession/>nttt<#list results.getResults() as result>nttt<tr>ntttt<td>${measurementSession.hostName}</td>ntttt<td>${measurementSession.instanceName}</td>ntttt<td>${result.status}</td>ntttt<td>${result.failingExpression}</td>ntttt<td>${result.currentValue}</td>nttt</tr>nttt</#list>ntt</#list>nt</tbody>n</table>nt</#if>n</#if>n","configurationCategory":"Alerting","valueType":"String","validOptions":null,"valueAsString":"<#-- @ftlvariable name=\"incident\" type=\"org.stagemonitor.alerting.incident.Incident\" -->n<h3>Incident for check ${incident.checkName}</h3>nFirst failure: ${incident.firstFailureAt?datetime?iso_local}<br>n<#if incident.resolvedAt??>nResolved at: ${incident.resolvedAt?datetime?iso_local}<br>n</#if>nOld status: ${incident.oldStatus!'OK'}<br>nNew status: ${incident.newStatus}<br>n<#if incident.failedChecks gt 0>Failing check<#if incident.failedChecks gt 1>s</#if>: ${incident.failedChecks}<br>nHosts: ${incident.hosts?join(\", \")}<br>nInstances: ${incident.instances?join(\", \")}<br><br>nnt<#if incident.checkResults?has_content>n<table>nt<thead>nt<tr>ntt<th>Host</th>ntt<th>Instance</th>ntt<th>Status</th>ntt<th>Description</th>ntt<th>Current Value</th>nt</tr>nt</thead>nt<tbody>ntt<#list incident.checkResults as results>nttt<#assign measurementSession=results.measurementSession/>nttt<#list results.getResults() as result>nttt<tr>ntttt<td>${measurementSession.hostName}</td>ntttt<td>${measurementSession.instanceName}</td>ntttt<td>${result.status}</td>ntttt<td>${result.failingExpression}</td>ntttt<td>${result.currentValue}</td>nttt</tr>nttt</#list>ntt</#list>nt</tbody>n</table>nt</#if>n</#if>n","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.template.plainText","aliasKeys":[],"label":"Alerts plain text freemarker template","description":null,"tags":[],"defaultValueAsString":"<#-- @ftlvariable name=\"incident\" type=\"org.stagemonitor.alerting.incident.Incident\" -->nIncident for check '${incident.checkName}':nFirst failure: ${incident.firstFailureAt?datetime?iso_local}n<#if incident.resolvedAt??>nResolved at: ${incident.resolvedAt?datetime?iso_local}n</#if>nOld status: ${incident.oldStatus!'OK'}nNew status: ${incident.newStatus}n<#if incident.failedChecks gt 0>Failing check<#if incident.failedChecks gt 1>s</#if>: ${incident.failedChecks}nHosts: ${incident.hosts?join(\", \")}nInstances: ${incident.instances?join(\", \")}nnDetails:n<#list incident.checkResults as results>n<#assign measurementSession=results.measurementSession/>n<#list results.getResults() as result>nHost:ttt${measurementSession.hostName}nInstance:tt${measurementSession.instanceName}nStatus: tt${result.status}nDescription:t${result.failingExpression}nCurrent value:t${result.currentValue}nn</#list></#list></#if>","configurationCategory":"Alerting","valueType":"String","validOptions":null,"valueAsString":"<#-- @ftlvariable name=\"incident\" type=\"org.stagemonitor.alerting.incident.Incident\" -->nIncident for check '${incident.checkName}':nFirst failure: ${incident.firstFailureAt?datetime?iso_local}n<#if incident.resolvedAt??>nResolved at: ${incident.resolvedAt?datetime?iso_local}n</#if>nOld status: ${incident.oldStatus!'OK'}nNew status: ${incident.newStatus}n<#if incident.failedChecks gt 0>Failing check<#if incident.failedChecks gt 1>s</#if>: ${incident.failedChecks}nHosts: ${incident.hosts?join(\", \")}nInstances: ${incident.instances?join(\", \")}nnDetails:n<#list incident.checkResults as results>n<#assign measurementSession=results.measurementSession/>n<#list results.getResults() as result>nHost:ttt${measurementSession.hostName}nInstance:tt${measurementSession.instanceName}nStatus: tt${result.status}nDescription:t${result.failingExpression}nCurrent value:t${result.currentValue}nn</#list></#list></#if>","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.alerts.template.shortDescription","aliasKeys":[],"label":"Alerts short description freemarker template","description":"Used for example for the email subject.","tags":[],"defaultValueAsString":"[${incident.oldStatus!'OK'} -> ${incident.newStatus}] ${incident.checkName} has ${incident.failedChecks} failing check<#if incident.failedChecks gt 1>s</#if>","configurationCategory":"Alerting","valueType":"String","validOptions":null,"valueAsString":"[${incident.oldStatus!'OK'} -> ${incident.newStatus}] ${incident.checkName} has ${incident.failedChecks} failing check<#if incident.failedChecks gt 1>s</#if>","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null}],"Elasticsearch trace storage plugin":[{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.elasticsearch.onlyLogElasticsearchRequestTraceReports","aliasKeys":["stagemonitor.requestmonitor.elasticsearch.onlyLogElasticsearchRequestTraceReports"],"label":"Only log Elasticsearch request trace reports","description":"If set to true, the spans won't be reported to elasticsearch but instead logged in bulk format. The name of the logger is ElasticsearchSpanReporter. That way you can redirect the reporting to a separate log file and use logstash or a different external process to send the spans to elasticsearch.","tags":["reporting"],"defaultValueAsString":"false","configurationCategory":"Elasticsearch trace storage plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.tracing.elasticsearch.spanIndexTemplate","aliasKeys":["stagemonitor.requestmonitor.elasticsearch.spanIndexTemplate"],"label":"ES Request Span Template","description":"The classpath location of the index template that is used for the stagemonitor-spans-* indices. By specifying the location to your own template, you can fully customize the index template.","tags":["elasticsearch"],"defaultValueAsString":"stagemonitor-elasticsearch-span-index-template.json","configurationCategory":"Elasticsearch trace storage plugin","valueType":"String","validOptions":null,"valueAsString":"stagemonitor-elasticsearch-span-index-template.json","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.elasticsearch.deleteSpansAfterDays","aliasKeys":["stagemonitor.requestmonitor.deleteRequestTracesAfterDays"],"label":"Delete spans after (days)","description":"When set, spans will be deleted automatically after the specified days. Set to a negative value to never delete spans.","tags":[],"defaultValueAsString":"-1","configurationCategory":"Elasticsearch trace storage plugin","valueType":"Integer","validOptions":null,"valueAsString":"-1","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.elasticsearch.reporter.maxBatchSize","aliasKeys":[],"label":"Max batch size","description":"The maximum number of spans which are batched into a single _bulk request to elasticsearch. If the span queue size exceeds the max batch size, a flush will be scheduled immediately. You can monitor the amount of reported spans and the actual batch sizes via the histogram elasticsearch_spans_bulk_size","tags":[],"defaultValueAsString":"250","configurationCategory":"Elasticsearch trace storage plugin","valueType":"Integer","validOptions":null,"valueAsString":"250","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.elasticsearch.reporter.flushDelayMs","aliasKeys":[],"label":"Flush delay (ms)","description":"The maximum amount of time between two flushes.","tags":[],"defaultValueAsString":"1000","configurationCategory":"Elasticsearch trace storage plugin","valueType":"Integer","validOptions":null,"valueAsString":"1000","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.tracing.elasticsearch.reporter.maxSpanQueueSize","aliasKeys":[],"label":"Max span queue size","description":"The maximum amount of elements in the span queue. If the queue is full and new spans arrive, they are dropped. You can monitor the amount of dropped spans via the counter elasticsearch_spans_dropped","tags":[],"defaultValueAsString":"1000","configurationCategory":"Elasticsearch trace storage plugin","valueType":"Integer","validOptions":null,"valueAsString":"1000","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null}],"JDBC Plugin":[{"dynamic":false,"sensitive":false,"key":"stagemonitor.profiler.jdbc.collectSql","aliasKeys":[],"label":"Collect SQLs in call tree","description":"Whether or not sql statements should be included in the call stack.","tags":[],"defaultValueAsString":"true","configurationCategory":"JDBC Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.profiler.jdbc.collectPreparedStatementParameters","aliasKeys":[],"label":"Collect prepared statement parameters","description":"Whether or not the prepared statement placeholders (?) should be replaced with the actual parameters.","tags":["security-relevant"],"defaultValueAsString":"true","configurationCategory":"JDBC Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.instrument.jdbc.dataSource.implementations","aliasKeys":[],"label":"Class name of DataSource implementations","description":"The class name of all known javax.sql.DataSource implementations. If your favourite implementation is not listed here, just add it to the list.","tags":[],"defaultValueAsString":"org.apache.tomcat.jdbc.pool.DataSource, org.apache.tomcat.dbcp.dbcp.PoolingDataSource, org.apache.tomcat.jdbc.pool.DataSourceProxy, org.apache.commons.dbcp2.PoolingDataSource, org.apache.commons.dbcp.PoolingDataSource, com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource, com.mchange.v2.c3p0.PoolBackedDataSource, com.mchange.v2.c3p0.ComboPooledDataSource, com.jolbox.bonecp.BoneCPDataSource, snaq.db.DBPoolDataSource, com.zaxxer.hikari.HikariDataSource, org.jboss.jca.adapters.jdbc.WrapperDataSource, org.springframework.jdbc.datasource.AbstractDriverBasedDataSource","configurationCategory":"JDBC Plugin","valueType":"Collection","validOptions":null,"valueAsString":"org.apache.tomcat.jdbc.pool.DataSource, org.apache.tomcat.dbcp.dbcp.PoolingDataSource, org.apache.tomcat.jdbc.pool.DataSourceProxy, org.apache.commons.dbcp2.PoolingDataSource, org.apache.commons.dbcp.PoolingDataSource, com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource, com.mchange.v2.c3p0.PoolBackedDataSource, com.mchange.v2.c3p0.ComboPooledDataSource, com.jolbox.bonecp.BoneCPDataSource, snaq.db.DBPoolDataSource, com.zaxxer.hikari.HikariDataSource, org.jboss.jca.adapters.jdbc.WrapperDataSource, org.springframework.jdbc.datasource.AbstractDriverBasedDataSource","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null}],"Tracing Plugin":[{"dynamic":false,"sensitive":false,"key":"stagemonitor.businessTransaction.namingStrategy","aliasKeys":[],"label":"Business Transaction naming strategy","description":"Defines how to name a business transaction that was detected by a method call. For example a Spring-MVC controller method or a method that is annotated with @Traced. Split method name by camel case (e.g. Method Name): Say Hello ClassName.methodName: HelloController.sayHello ClassName#methodName: HelloController#sayHello ","tags":[],"defaultValueAsString":"METHOD_NAME_SPLIT_CAMEL_CASE","configurationCategory":"Tracing Plugin","valueType":"BusinessTransactionNamingStrategy","validOptions":["METHOD_NAME_SPLIT_CAMEL_CASE","CLASS_NAME_HASH_METHOD_NAME","CLASS_NAME_DOT_METHOD_NAME"],"valueAsString":"METHOD_NAME_SPLIT_CAMEL_CASE","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":{"METHOD_NAME_SPLIT_CAMEL_CASE":"Split method name by camel case (e.g. Method Name)","CLASS_NAME_HASH_METHOD_NAME":"ClassName#methodName","CLASS_NAME_DOT_METHOD_NAME":"ClassName.methodName"}},{"dynamic":false,"sensitive":false,"key":"stagemonitor.tracing.monitorScheduledTasks","aliasKeys":["stagemonitor.requestmonitor.monitorScheduledTasks"],"label":"Monitor scheduled tasks","description":"Set to true trace EJB (@Schedule) and Spring (@Scheduled) scheduled tasks.","tags":[],"defaultValueAsString":"false","configurationCategory":"Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.tracing.monitorAsyncInvocations","aliasKeys":["stagemonitor.requestmonitor.monitorAsyncInvocations"],"label":"Monitor async invocations","description":"Set to true trace EJB (@Asynchronous) and Spring (@Async) async invocations.","tags":[],"defaultValueAsString":"false","configurationCategory":"Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.params.confidential.regex","aliasKeys":["stagemonitor.requestmonitor.requestparams.confidential.regex","stagemonitor.requestmonitor.params.confidential.regex"],"label":"Confidential parameters (regex)","description":"A list of request parameter name patterns that should not be collected.nIn the context of a HTTP request, a request parameter is either a query string or a application/x-www-form-urlencoded request body (POST form content). In the context of a method invocation monitored with @Traced,this refers to the parameter name of the monitored method. Note that you have to compile your classeswith 'vars' debug information.","tags":["security-relevant"],"defaultValueAsString":"(?i).*pass.*, (?i).*credit.*, (?i).*pwd.*, (?i)pw","configurationCategory":"Tracing Plugin","valueType":"Collection","validOptions":null,"valueAsString":"(?i).*pass.*, (?i).*credit.*, (?i).*pwd.*, (?i)pw","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.tags.excluded","aliasKeys":[],"label":"Excluded tags","description":"A list of tags which should not be reported. Note that is not possible to exclude boolean tags. For example, if you don't want a particular call tree format to be reported, add call_tree_json or call_tree_ascii accordingly.","tags":[],"defaultValueAsString":"","configurationCategory":"Tracing Plugin","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.profiler.active","aliasKeys":[],"label":"Activate Profiler","description":"Whether or not the call tree profiler should be active.","tags":["profiler"],"defaultValueAsString":"true","configurationCategory":"Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.profiler.minExecutionTimeNanos","aliasKeys":[],"label":"Min execution time (nanos)","description":"Don't show methods that executed faster than this value in the call tree (1 ms = 1,000,000 ns).","tags":["profiler"],"defaultValueAsString":"100000","configurationCategory":"Tracing Plugin","valueType":"Long","validOptions":null,"valueAsString":"100000","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.profiler.minExecutionTimePercent","aliasKeys":[],"label":"Min execution time (%)","description":"Don't show methods that executed faster than this value in the call tree (0.5 or 0,5 means 0.5%).","tags":["profiler"],"defaultValueAsString":"0.5","configurationCategory":"Tracing Plugin","valueType":"Double","validOptions":null,"valueAsString":"0.5","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.profiler.objectPooling","aliasKeys":[],"label":"Activate Profiler Object Pooling","description":"Activates the experimental object pooling feature for the profiler. When enabled, instances of CallStackElement are not garbage collected but put into an object pool when not needed anymore. When we need a new instance of CallStackElement, it is not created with `new CallStackElement()` but taken from the pool instead. This aims to reduce heap usage and garbage collections caused by stagemonitor.","tags":["profiler","experimental"],"defaultValueAsString":"false","configurationCategory":"Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.profiler.sampling.rateLimitPerMinute","aliasKeys":["stagemonitor.requestmonitor.onlyCollectNCallTreesPerMinute"],"label":"Only report N call trees per minute","description":"Limits the rate at which call trees are collected. Set to a value below 1 to deactivate call tree recording and to 1000000 or higher to always collect.","tags":["profiler","sampling"],"defaultValueAsString":"1000000.0","configurationCategory":"Tracing Plugin","valueType":"Double","validOptions":null,"valueAsString":"1000000.0","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.profiler.formatter","aliasKeys":[],"label":"Call Tree ASCII formatter","description":"Lets you choose how the method signatures in the ASCII call tree are formatted. It's also possible to supply a custom implementation.","tags":["profiler","advanced"],"defaultValueAsString":"org.stagemonitor.tracing.profiler.formatter.ShortSignatureFormatter","configurationCategory":"Tracing Plugin","valueType":"AsciiCallTreeSignatureFormatter","validOptions":["org.stagemonitor.tracing.profiler.formatter.LongMethodNameFormatter","org.stagemonitor.tracing.profiler.formatter.ShortSignatureFormatter"],"valueAsString":"org.stagemonitor.tracing.profiler.formatter.ShortSignatureFormatter","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":{"org.stagemonitor.tracing.profiler.formatter.LongMethodNameFormatter":"Long Signature (full package names and parameters)","org.stagemonitor.tracing.profiler.formatter.ShortSignatureFormatter":"Short Signature (no packages and parameters)"}},{"dynamic":true,"sensitive":false,"key":"stagemonitor.anonymizeIPs","aliasKeys":[],"label":"Anonymize IP Addresses","description":"For IPv4 addresses, the last octet is set to zero. If the address is a IPv6 address, the last 80 bits (10 bytes) are set to zero. This is just like Google Analytics handles IP anonymization.","tags":["privacy"],"defaultValueAsString":"true","configurationCategory":"Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.pseudonymize.username","aliasKeys":[],"label":"Pseudonymize Usernames","description":"Stagemonitor collects the user names which may be a privacy issue. If set to true, the user name will be pseudonymized (SHA1 hashed).","tags":["privacy"],"defaultValueAsString":"false","configurationCategory":"Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.disclose.users","aliasKeys":[],"label":"Disclose users","description":"When you pseudonymize user names and detect that a specific user seems malicious, you can disclose their real user name to make further investigations. Also, the IP won't be anonymized anymore for these users. If pseudonymizing user names is active you can specify a list of user name pseudonyms to disclose. If not, just use the plain user names to disclose their IP address.","tags":["privacy"],"defaultValueAsString":"","configurationCategory":"Tracing Plugin","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.reporting.log","aliasKeys":["stagemonitor.requestmonitor.reporting.log"],"label":"Log spans","description":"Whether or not spans should be logged.","tags":["reporting"],"defaultValueAsString":"false","configurationCategory":"Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.report.async","aliasKeys":["stagemonitor.requestmonitor.report.async"],"label":"Report Async","description":"Set to true to report collected spans asynchronously. It's recommended to always set this to true. Otherwise the performance of your requests will suffer as spans are reported in band.","tags":["reporting","advanced"],"defaultValueAsString":"true","configurationCategory":"Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.metrics.async","aliasKeys":[],"label":"Track Metrics Async","description":"Set to true to track response time metrics asynchronously.","tags":["metircs","advanced"],"defaultValueAsString":"true","configurationCategory":"Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.unnestExeptions","aliasKeys":["stagemonitor.requestmonitor.unnestExeptions"],"label":"Unnest Exceptions","description":"Some Exceptions are so called 'nested exceptions' which wrap the actual cause of the exception. A prominent example is Spring's NestedServletException. In those cases it makes sense to unnest the exception to see the actual cause in the request analysis dashboard.","tags":[],"defaultValueAsString":"org.springframework.web.util.NestedServletException","configurationCategory":"Tracing Plugin","valueType":"Collection","validOptions":null,"valueAsString":"org.springframework.web.util.NestedServletException","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.ignoreExeptions","aliasKeys":["stagemonitor.requestmonitor.ignoreExeptions"],"label":"Ignore Exceptions","description":"The class names of exception to ignore. These exceptions won't show up in the span and won't cause the error flag of the span to be set to true.","tags":[],"defaultValueAsString":"","configurationCategory":"Tracing Plugin","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.sampling.onlyReportSpansWithName","aliasKeys":["stagemonitor.requestmonitor.onlyReportRequestsWithNameToElasticsearch"],"label":"Only report these operation names","description":"Limits the reporting of spans to operations with a certain name.","tags":["sampling"],"defaultValueAsString":"","configurationCategory":"Tracing Plugin","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.sampling.rateLimitPerMinute.default","aliasKeys":[],"label":"Rate limit for spans per minute","description":"Limits the rate at which spans are collected and reported. Set to a value below 1 to deactivate reporting and to 1000000 or higher to always report. This setting is active for all operation types which are not listed in 'stagemonitor.requestmonitor.sampling.rateLimitPerMinute.perType'","tags":["sampling"],"defaultValueAsString":"1000000.0","configurationCategory":"Tracing Plugin","valueType":"Double","validOptions":null,"valueAsString":"1000000.0","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.sampling.rateLimitPerMinute.perType","aliasKeys":[],"label":"Rate limit for spans per minute per operation type","description":"Limits the rate at which specific spans like 'jdbc' queries are collected and reported. Set to a value below 1 to deactivate reporting and to 1000000 or higher to always report. If your application makes excessive use of for example jdbc queries, you might want to deactivate or rate limit the collection of spans. Example: `jdbc: 0, http: 1000000`","tags":["external-requests","sampling"],"defaultValueAsString":"","configurationCategory":"Tracing Plugin","valueType":"Map","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.sampling.percent.default","aliasKeys":[],"label":"Sampling probability for spans in %","description":"Sets the percentage of spans which are collected and reported. When set to '0.01', only 1% of the spans will be reported; when set to '1', all spans will be reported. Note that the maximum granularity is 1%. This setting is active for all operation types which are not listed in 'stagemonitor.requestmonitor.sampling.percent.perType'","tags":["sampling"],"defaultValueAsString":"1.0","configurationCategory":"Tracing Plugin","valueType":"Double","validOptions":null,"valueAsString":"1.0","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.sampling.percent.perType","aliasKeys":[],"label":"Sampling probability for spans in % per operation type","description":"Sets the percentage of specific spans like 'jdbc' queries are collected and reported. When set to '0.01', only 1% of the spans will be reported; when set to '1', all spans will be reported. Note that the maximum granularity is 1%. If your application makes excessive use of for example jdbc queries, you might want to deactivate or rate limit the collection of spans. Example: `jdbc: 0, http: 0.1`","tags":["sampling"],"defaultValueAsString":"","configurationCategory":"Tracing Plugin","valueType":"Map","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.sampling.excludeCallTreeFromReportWhenFasterThanXPercentOfRequests","aliasKeys":["stagemonitor.requestmonitor.elasticsearch.excludeCallTreeFromElasticsearchReportWhenFasterThanXPercentOfRequests"],"label":"Exclude the Call Tree from reports on x% of the fastest requests","description":"Exclude the Call Tree from report when the request was faster faster than x percent of requests with the same request name. This helps to reduce the network and disk overhead as uninteresting Call Trees (those which are comparatively fast) are excluded. Example: set to 1 to always exclude the Call Tree and to 0 to always include it. With a setting of 0.85, the Call Tree will only be reported for the slowest 25% of the requests.","tags":["sampling"],"defaultValueAsString":"0.0","configurationCategory":"Tracing Plugin","valueType":"Double","validOptions":null,"valueAsString":"0.0","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.external.excludeExternalRequestsWhenFasterThanXPercent","aliasKeys":["stagemonitor.requestmonitor.external.excludeExternalRequestsWhenFasterThanXPercent"],"label":"Exclude external requests from reporting on x% of the fastest external requests","description":"Exclude the external request from reporting when the request was faster faster than x percent of external requests with the same initiator (executedBy). This helps to reduce the network and disk overhead as uninteresting external requests (those which are comparatively fast) are excluded.Example: set to 1 to always exclude the external request and to 0 to always include it. With a setting of 0.85, the external request will only be reported for the slowest 25% of the requests.","tags":["external-requests","sampling"],"defaultValueAsString":"0.0","configurationCategory":"Tracing Plugin","valueType":"Double","validOptions":null,"valueAsString":"0.0","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.external.excludeExternalRequestsFasterThan","aliasKeys":["stagemonitor.requestmonitor.external.excludeExternalRequestsFasterThan"],"label":"Exclude external requests from reporting when faster than x ms","description":"Exclude the external request from reporting when the request was faster faster than x ms.","tags":["external-requests","sampling"],"defaultValueAsString":"0.0","configurationCategory":"Tracing Plugin","valueType":"Double","validOptions":null,"valueAsString":"0.0","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null}],"SOAP Tracing Plugin":[{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.soap.client.recordRequestMessages","aliasKeys":[],"label":"Record SOAP client request messages","description":"When set to true, the SOAP message of client SOAP requests will be attached to the span.","tags":[],"defaultValueAsString":"false","configurationCategory":"SOAP Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.soap.client.recordResponseMessages","aliasKeys":[],"label":"Record SOAP client response messages","description":"When set to true, the SOAP message of SOAP responses received by SOAP clients will be attached to the span.","tags":[],"defaultValueAsString":"false","configurationCategory":"SOAP Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.soap.server.recordRequestMessages","aliasKeys":[],"label":"Record SOAP incoming request messages","description":"When set to true, the SOAP message of incoming SOAP requests will be attached to the span.","tags":[],"defaultValueAsString":"false","configurationCategory":"SOAP Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.tracing.soap.server.recordResponseMessages","aliasKeys":[],"label":"Record SOAP outgoing response messages","description":"When set to true, the SOAP message of outgoing SOAP responses will be attached to the span.","tags":[],"defaultValueAsString":"false","configurationCategory":"SOAP Tracing Plugin","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null}],"Core":[{"dynamic":true,"sensitive":false,"key":"stagemonitor.active","aliasKeys":[],"label":"Activate stagemonitor","description":"If set to `false` stagemonitor will be completely deactivated.","tags":[],"defaultValueAsString":"true","configurationCategory":"Core","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.internal.monitoring","aliasKeys":[],"label":"Internal monitoring","description":"If active, stagemonitor will collect internal performance data","tags":[],"defaultValueAsString":"false","configurationCategory":"Core","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.interval.console","aliasKeys":[],"label":"Reporting interval console","description":"The amount of time between console reports (in seconds). To deactivate console reports, set this to a value below 1.","tags":[],"defaultValueAsString":"0","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"0","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.jmx","aliasKeys":[],"label":"Expose MBeans","description":"Whether or not to expose all metrics as MBeans.","tags":[],"defaultValueAsString":"false","configurationCategory":"Core","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.interval.graphite","aliasKeys":[],"label":"Reporting interval graphite","description":"The amount of time between the metrics are reported to graphite (in seconds).nTo deactivate graphite reporting, set this to a value below 1, or don't provide stagemonitor.reporting.graphite.hostName.","tags":["metrics-store","graphite"],"defaultValueAsString":"60","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"60","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.graphite.hostName","aliasKeys":[],"label":"Graphite host name","description":"The name of the host where graphite is running. This setting is mandatory, if you want to use the grafana dashboards.","tags":["metrics-store","graphite"],"defaultValueAsString":null,"configurationCategory":"Core","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.graphite.port","aliasKeys":[],"label":"Carbon port","description":"The port where carbon is listening.","tags":["metrics-store","graphite"],"defaultValueAsString":"2003","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"2003","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.reporting.influxdb.url","aliasKeys":[],"label":"InfluxDB URL","description":"The URL of your InfluxDB installation.","tags":["metrics-store","influx-db"],"defaultValueAsString":null,"configurationCategory":"Core","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.reporting.influxdb.db","aliasKeys":[],"label":"InfluxDB database","description":"The target database","tags":["metrics-store","influx-db"],"defaultValueAsString":"stagemonitor","configurationCategory":"Core","valueType":"String","validOptions":null,"valueAsString":"stagemonitor","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.interval.influxdb","aliasKeys":[],"label":"Reporting interval InfluxDb","description":"The amount of time between the metrics are reported to InfluxDB (in seconds).","tags":["metrics-store","influx-db"],"defaultValueAsString":"60","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"60","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.interval.elasticsearch","aliasKeys":[],"label":"Reporting interval Elasticsearch","description":"The amount of time between the metrics are reported to Elasticsearch (in seconds).","tags":["metrics-store","elasticsearch"],"defaultValueAsString":"60","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"60","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.elasticsearch.onlyLogElasticsearchMetricReports","aliasKeys":[],"label":"Only log Elasticsearch metric reports","description":"If set to true, the metrics won't be reported to elasticsearch but instead logged in bulk format. The name of the logger is ElasticsearchMetrics. That way you can redirect the reporting to a separate log file and use logstash or a different external process to send the metrics to elasticsearch.","tags":["metrics-store","elasticsearch"],"defaultValueAsString":"false","configurationCategory":"Core","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.elasticsearch.deleteMetricsAfterDays","aliasKeys":[],"label":"Delete ES metrics after (days)","description":"The number of days after the metrics stored in elasticsearch should be deleted. Set below 1 to deactivate.","tags":["metrics-store","elasticsearch"],"defaultValueAsString":"-1","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"-1","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.elasticsearch.hotColdArchitecture.moveToColdNodesAfterDays","aliasKeys":["stagemonitor.elasticsearch.hotColdArchitecture.moveToColdNodesAfterDays"],"label":"Activate Hot-Cold Architecture","description":"Setting this to a value > 1 activates the hot-cold architecture described in https://www.elastic.co/blog/hot-warm-architecture where new data that is more frequently queried and updated is stored on beefy nodes (SSDs, more RAM and CPU). When the indexes reach a certain age, they are allocated on cold nodes. For this to work, you have to tag your beefy nodes with node.box_type: hot (either in elasticsearch.yml or start the node using ./bin/elasticsearch --node.box_type hot)and your historical nodes with node.box_type: cold.","tags":["metrics-store","elasticsearch"],"defaultValueAsString":"-1","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"-1","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.elasticsearch.numberOfReplicas","aliasKeys":["stagemonitor.elasticsearch.numberOfReplicas"],"label":"Number of ES Replicas","description":"Sets the number of replicas of the Elasticsearch index templates.","tags":["metrics-store","elasticsearch"],"defaultValueAsString":"0","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"0","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.elasticsearch.numberOfShards","aliasKeys":["stagemonitor.elasticsearch.numberOfShards"],"label":"Number of ES Shards","description":"Sets the number of shards of the Elasticsearch index templates.","tags":["metrics-store","elasticsearch"],"defaultValueAsString":"1","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"1","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.applicationName","aliasKeys":[],"label":"Application name","description":"The name of the application.nIt is highly recommended to set this to a short and descriptive name of you application. The dashboards provide a filter for the application name.","tags":["important"],"defaultValueAsString":"My Application","configurationCategory":"Core","valueType":"String","validOptions":null,"valueAsString":"My Application","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.instanceName","aliasKeys":[],"label":"Instance name","description":"The instance name.nThe instance or stage of your application. For example prod, test, test1, dev. It's important to set this to a useful value because the dashboards provide filters for the instance.","tags":["important"],"defaultValueAsString":"My Instance","configurationCategory":"Core","valueType":"String","validOptions":null,"valueAsString":"My Instance","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.hostName","aliasKeys":[],"label":"Host name","description":"The host name.nIf this property is not set, the host name will default to resolving the host name for localhost, if this fails it will be loaded from the environment, either from COMPUTERNAME, HOSTNAME or HOST. The dashboards provide a filter for the host name.","tags":[],"defaultValueAsString":"N51.local","configurationCategory":"Core","valueType":"String","validOptions":null,"valueAsString":"N51.local","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.reporting.elasticsearch.url","aliasKeys":["stagemonitor.elasticsearch.url"],"label":"Elasticsearch URL","description":"A comma separated list of the Elasticsearch URLs that store spans and metrics. If your ES cluster is secured with basic authentication, you can use urls like https://user:password@example.com.","tags":["elasticsearch"],"defaultValueAsString":"","configurationCategory":"Core","valueType":"List","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.configuration.elasticsearch.configurationSourceProfiles","aliasKeys":["stagemonitor.elasticsearch.configurationSourceProfiles"],"label":"Elasticsearch configuration source profiles","description":"Set configuration profiles of configuration stored in elasticsearch as a centralized configuration source that can be shared between multiple server instances. Set the profiles appropriate to the current environment e.g. `common,prod`, `local`, `test`, ...When you provide multiple profiles, the later ones have precedence over the first ones. The configuration will be stored under `{stagemonitor.reporting.elasticsearch.url}/stagemonitor-configuration/configuration/{configurationSourceProfile}`.","tags":[],"defaultValueAsString":"","configurationCategory":"Core","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.configuration.elasticsearch.deactivateStagemonitorIfEsIsDown","aliasKeys":["stagemonitor.elasticsearch.configurationSource.deactivateStagemonitorIfEsIsDown"],"label":"Deactivate stagemonitor if elasticsearch configuration source is down","description":"Set to true if stagemonitor should be deactivated if stagemonitor.configuration.elasticsearch.configurationSourceProfiles is set but elasticsearch can't be reached under stagemonitor.reporting.elasticsearch.url. Defaults to true to prevent starting stagemonitor with wrong configuration.","tags":[],"defaultValueAsString":"true","configurationCategory":"Core","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.metrics.excluded.pattern","aliasKeys":[],"label":"Excluded metric names","description":"A comma separated list of metric names that should not be collected.","tags":[],"defaultValueAsString":"","configurationCategory":"Core","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.plugins.disabled","aliasKeys":[],"label":"Disabled plugins","description":"A comma separated list of plugin names (the simple class name) that should not be active.","tags":[],"defaultValueAsString":"","configurationCategory":"Core","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.configuration.reload.interval","aliasKeys":[],"label":"Configuration reload interval","description":"The interval in seconds a reload of all configuration sources is performed. Set to a value below `1` to deactivate periodic reloading the configuration.","tags":[],"defaultValueAsString":"60","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"60","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.instrument.exclude","aliasKeys":[],"label":"Excluded packages","description":"Exclude packages and their sub-packages from the instrumentation (for example the profiler).","tags":[],"defaultValueAsString":"","configurationCategory":"Core","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.instrument.excludeContaining","aliasKeys":[],"label":"Exclude containing","description":"Exclude classes from the instrumentation (for example from profiling) that contain one of the following strings as part of their class name.","tags":[],"defaultValueAsString":"$JaxbAccessor, $$, CGLIB, EnhancerBy, $Proxy","configurationCategory":"Core","valueType":"Collection","validOptions":null,"valueAsString":"$JaxbAccessor, $$, CGLIB, EnhancerBy, $Proxy","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.instrument.include","aliasKeys":[],"label":"Included packages","description":"The packages that should be included for instrumentation. If this property is required if you want to use the profiler, the @MonitorRequests annotation, the com.codahale.metrics.annotation.* annotations or similar features. You can exclude subpackages of a included package via `stagemonitor.instrument.exclude`.","tags":[],"defaultValueAsString":"","configurationCategory":"Core","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.instrument.runtimeAttach","aliasKeys":[],"label":"Attach agent at runtime","description":"Attaches the agent via the Attach API at runtime and retransforms all currently loaded classes.","tags":[],"defaultValueAsString":"true","configurationCategory":"Core","valueType":"Boolean","validOptions":null,"valueAsString":"true","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.instrument.exportGeneratedClassesWithName","aliasKeys":[],"label":"Export generated classes with name","description":"A list of the fully qualified class names which should be exported to the file system after they have been modified by Byte Buddy. This option is useful to debug problems inside the generated class. Classes are exported to a temporary directory. The logs contain the information where the files are stored.","tags":[],"defaultValueAsString":"","configurationCategory":"Core","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.instrument.debug","aliasKeys":[],"label":"Debug instrumentation","description":"Set to true to log additional information and warnings during the instrumentation process.","tags":[],"defaultValueAsString":"false","configurationCategory":"Core","valueType":"Boolean","validOptions":null,"valueAsString":"false","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.instrument.excludedInstrumenter","aliasKeys":[],"label":"Excluded Instrumenters","description":"A list of the simple class names of StagemonitorByteBuddyTransformers that should not be applied","tags":[],"defaultValueAsString":"","configurationCategory":"Core","valueType":"Collection","validOptions":null,"valueAsString":"","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.grafana.url","aliasKeys":[],"label":"Grafana URL","description":"The URL of your Grafana 2.0 installation","tags":["grafana"],"defaultValueAsString":null,"configurationCategory":"Core","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":true,"key":"stagemonitor.grafana.apiKey","aliasKeys":[],"label":"Grafana API Key","description":"The API Key of your Grafana 2.0 installation. See http://docs.grafana.org/reference/http_api/#create-api-token how to create a key. The key has to have the admin role. This is necessary so that stagemonitor can automatically add datasources and dashboards to Grafana.","tags":["grafana"],"defaultValueAsString":null,"configurationCategory":"Core","valueType":"String","validOptions":null,"valueAsString":null,"nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.threadPools.queueCapacityLimit","aliasKeys":[],"label":"Thread Pool Queue Capacity Limit","description":"Sets a limit to the number of pending tasks in the ExecutorServices stagemonitor uses. These are thread pools that are used for example to report spans to elasticsearch. If elasticsearch is unreachable or your application encounters a spike in incoming requests this limit could be reached. It is used to prevent the queue from growing indefinitely. ","tags":["advanced"],"defaultValueAsString":"1000","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"1000","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":true,"sensitive":false,"key":"stagemonitor.reporting.elasticsearch.metricsIndexTemplate","aliasKeys":[],"label":"ES Metrics Index Template","description":"The classpath location of the index template that is used for the stagemonitor-metrics-* indices. By specifying the location to your own template, you can fully customize the index template.","tags":["metrics-store","elasticsearch"],"defaultValueAsString":"stagemonitor-elasticsearch-metrics-index-template.json","configurationCategory":"Core","valueType":"String","validOptions":null,"valueAsString":"stagemonitor-elasticsearch-metrics-index-template.json","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null},{"dynamic":false,"sensitive":false,"key":"stagemonitor.reporting.elasticsearch.availabilityCheckPeriodSec","aliasKeys":["stagemonitor.elasticsearch.availabilityCheckPeriodSec"],"label":"Elasticsearch availability check period (sec)","description":"When set to a value > 0 stagemonitor periodically checks if Elasticsearch is available. When not available, stagemonitor won't try send documents to Elasticsearch which would fail anyway. This reduces heap usage as the documents won't be queued up. It also avoids the logging of warnings when the queue is filled up to the limit (see 'stagemonitor.threadPools.queueCapacityLimit')","tags":["elasticsearch","advanced"],"defaultValueAsString":"5","configurationCategory":"Core","valueType":"Integer","validOptions":null,"valueAsString":"5","nameOfCurrentConfigurationSource":"Default Value","errorMessage":null,"default":true,"validOptionsLabelMap":null}]};

					stagemonitorWindow.stagemonitor.measurementSession = {"applicationName": "Spring PetClinic","hostName": "n51","instanceName": "localhost","startTimestamp": "2015-03-07T16:14:26.416+0100","endTimestamp": null,"endTimestampEpoch": null,"startTimestampEpoch": 1425741266416};
					stagemonitorWindow.stagemonitor.pathsOfTabPlugins = ["/stagemonitor-alerting/src/main/resources/stagemonitor/static/tabs/alert/alerting-tab"];
					var connectionId = generateUUID();
					addXMLRequestCallback( function( xhr ) {
						xhr.setRequestHeader("x-stagemonitor-connection-id", connectionId);
					});

					stagemonitorWindow.stagemonitor.openOverlay = function () {
						stagemonitorOverlay.style.display = "block";
						stagemonitorWindow.stagemonitor.onOpen();
						stagemonitorWindow.focus();
					};

					stagemonitorWindow.stagemonitor.closeOverlay = function () {
						stagemonitorOverlay.style.display = "none";
					};

					stagemonitorWindow.stagemonitor.initialize(data, configurationSources, configurationOptions,
							"http://localhost:9966/petclinic", contextPath, true, connectionId,
							[
								"/stagemonitor-requestmonitor/src/main/resources/stagemonitor/static/tabs/metrics/request-metrics",
								"/stagemonitor-jdbc/src/main/resources/stagemonitor/static/tabs/metrics/jdbc-metrics",
								"/stagemonitor-logging/src/main/resources/stagemonitor/static/tabs/metrics/logging-metrics",
								"/stagemonitor-jvm/src/main/resources/stagemonitor/static/tabs/metrics/jvm-metrics",
								"/stagemonitor-ehcache/src/main/resources/stagemonitor/static/tabs/metrics/ehcache-metrics",
								"/stagemonitor-os/src/main/resources/stagemonitor/static/tabs/metrics/os-metrics"
							], true);

					var thresholdExceeded = stagemonitorWindow.stagemonitor.thresholdExceeded;
					stagemonitorOverlayShow.className = thresholdExceeded ? "stagemonitor-threshold-exceeded" : "stagemonitor-threshold-ok";
					stagemonitorOverlayShow.addEventListener("click", stagemonitorWindow.stagemonitor.openOverlay);
					stagemonitorWindow.stagemonitor.openOverlay();
				}
			};

			function generateUUID(){
				var d = new Date().getTime();
				return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
					var r = (d + Math.random() * 16) % 16 | 0;
					d = Math.floor(d / 16);
					return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16);
				});
			}

			function addXMLRequestCallback(callback){
				var oldSend, i;
				if( XMLHttpRequest.callbacks ) {
					// we've already overridden send() so just add the callback
					XMLHttpRequest.callbacks.push( callback );
				} else {
					// create a callback queue
					XMLHttpRequest.callbacks = [callback];
					// store the native send()
					oldSend = XMLHttpRequest.prototype.send;
					// override the native send()
					XMLHttpRequest.prototype.send = function(){
						// process the callback queue
						// the xhr instance is passed into each callback but seems pretty useless
						// you can't tell what its destination is or call abort() without an error
						// so only really good for logging that a request has happened
						// I could be wrong, I hope so...
						// EDIT: I suppose you could override the onreadystatechange handler though
						for( i = 0; i < XMLHttpRequest.callbacks.length; i++ ) {
							XMLHttpRequest.callbacks[i]( this );
						}
						// call the native send()
						oldSend.apply(this, arguments);
					}
				}
			}

		}());
	</script>
	<style>
		#stagemonitor-overlay {
			position: fixed;
			background-color: rgba(0, 0, 0, 0.5);
			width: 100%;
			height: 100%;
			z-index: 100000;
			top: 0;
			left: 0;
		}

		#stagemonitor-overlay-show:hover {
			background-color: rgba(0, 0, 0, 0.6);
		}

		#stagemonitor-overlay-show {
			position: fixed;
			right: 3em;
			bottom: 3em;
			border-radius: 1em;
			padding: 0.5em;
			cursor: pointer;
			z-index: 999;
		}

		.stagemonitor-threshold-ok {
			background-color: rgba(0, 0, 0, 0.5);
		}

		.stagemonitor-threshold-exceeded {
			background-color: #bf3636;
			-webkit-animation: togglebackground 4s infinite;
			animation: togglebackground 4s infinite;
		}

		@-webkit-keyframes togglebackground {
			0%   {background-color: rgba(0, 0, 0, 0.5);}
			30%  {background-color: #bf3636}
			60%  {background-color: #bf3636}
			100% {background-color: rgba(0, 0, 0, 0.5);}
		}

		@keyframes togglebackground {
			0%   {background-color: rgba(0, 0, 0, 0.5);}
			30%  {background-color: #bf3636}
			60%  {background-color: #bf3636}
			100% {background-color: rgba(0, 0, 0, 0.5);}
		}

		#stagemonitor-modal {
			height: 100%;
			width: 100%;
		}
	</style>

	<div id="stagemonitor-overlay-show" class="stagemonitor-threshold-ok">
		<img src="../../main/resources/stagemonitor/static/stagemonitor.png" />
	</div>

</body>
</html>

